package com.lanxiao.cloud.modules.oauth.domain.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.lanxiao.cloud.common.core.utils.DateUtils;
import com.lanxiao.cloud.common.mybatis.service.BaseService;
import com.lanxiao.cloud.modules.oauth.domain.model.UserAuth;
import com.lanxiao.cloud.modules.oauth.infrastructure.enums.LoginType;
import org.springframework.util.DigestUtils;

/**
 * @author ：qiaoliang
 * @date ：2021-08-24
 */
public interface ILoginService extends BaseService<Long, UserAuth> {

  /**
   *  登录
   *
   * @author ：qiaoliang
   * @param principal : 标识（手机号 邮箱 用户名或第三方应用的唯一标识）
   * @param credential : 密码凭证（站内的保存密码，站外的不保存或保存token）
   * @param ip : ip
   * @date 2021-08-09 10:39
   */
  String login(String principal, String credential, String ip);

  /***
   *  登录类型（手机号 邮箱 用户名）或第三方应用名称（微信 微博等）
   *
   * @author ：qiaoliang
   * @date 2021-08-09 10:39
   */
  LoginType only();

  /**
   * 获取对应标识信息
   *
   * @author ：qiaoliang
   * @param principal : 标识
   * @return lanxiao.cloud.oauth.domain.model.UserAuth
   * @date 2021-08-24 17:10
   */
  default UserAuth findByPrincipal(String principal) {
    return this.getOne(new LambdaQueryWrapper<UserAuth>()
        .eq(UserAuth::getPrincipal,principal));
  }


  /**
   *  随机token生成
   *
   * @author ：qiaoliang
   * @param principal : 标识
   * @return java.lang.String
   * @date 2021-08-24 17:43
   */
  default String token(String principal) {
    return DigestUtils.md5DigestAsHex((principal + DateUtils.getCurrentTimestamp()).getBytes());
  }

}
